package com.kexio.user.service;

import java.util.List;

/**
 * 权限同步服务接口
 * 
 * 🎯 核心功能：
 * 1. 权限变更时实时同步到在线用户
 * 2. 角色分配变更时自动刷新相关用户权限
 * 3. 支持批量权限同步操作
 * 
 * 🚀 技术特点：
 * - 基于Sa-Token的权限缓存刷新
 * - 无需用户重新登录
 * - 支持多租户权限隔离
 * 
 * @author Kexio Team
 * @since 2.2.0
 */
public interface PermissionSyncService {
    
    /**
     * 同步单个用户的权限变更
     * 
     * @param userId 用户ID
     * @param tenantId 租户ID
     * @param changeReason 变更原因
     */
    void syncUserPermissions(String userId, String tenantId, String changeReason);
    
    /**
     * 同步角色权限变更（影响所有拥有该角色的用户）
     * 
     * @param roleId 角色ID  
     * @param tenantId 租户ID
     * @param changeReason 变更原因
     */
    void syncRolePermissions(String roleId, String tenantId, String changeReason);
    
    /**
     * 同步菜单权限变更（影响所有相关用户）
     * 
     * @param menuId 菜单ID
     * @param tenantId 租户ID
     * @param changeReason 变更原因
     */
    void syncMenuPermissions(String menuId, String tenantId, String changeReason);
    
    /**
     * 批量同步多个用户的权限
     * 
     * @param userIds 用户ID列表
     * @param tenantId 租户ID
     * @param changeReason 变更原因
     */
    void batchSyncUserPermissions(List<String> userIds, String tenantId, String changeReason);
    
    /**
     * 同步租户下所有用户的权限（慎用）
     * 
     * @param tenantId 租户ID
     * @param changeReason 变更原因
     */
    void syncAllTenantPermissions(String tenantId, String changeReason);
    
    /**
     * 检查用户是否在线并需要权限同步
     * 
     * @param userId 用户ID
     * @param tenantId 租户ID
     * @return 是否需要同步
     */
    boolean shouldSyncUser(String userId, String tenantId);
}
